package cn.bearspark.happening.provider.service;

import cn.bearspark.happening.dto.happening.VoteInfo4Publish;
import cn.bearspark.happening.dto.vote.VoteDetailDTO;
import cn.bearspark.happening.dto.vote.VoteReqDTO;
import cn.bearspark.happening.provider.service.bo.VoteSimpleBO;

import java.util.List;
import java.util.Map;

/**
 * 动态的投票模块的服务接口
 *
 * @author f
 */
public interface VoteService {

    /**
     * 发布动态投票
     *
     * @param voteInfo    发布投票的数据
     * @param voteId      投票的 id，同时也是动态的 id
     * @param publisherId 发布投票者的用户 id
     */
    void publish(VoteInfo4Publish voteInfo, long voteId, long publisherId);

    /**
     * 投票
     *
     * @param voteReqDTO 投票的数据传输对象
     * @return 选取的选项的信息，格式为 "optionContent1"、"optionContent2"、"optionContent3"...
     */
    String vote(VoteReqDTO voteReqDTO);

    /**
     * 查看投票详情
     *
     * @param voteId 投票的 id
     * @param userId 查询投票信息的用户的用户 id
     * @return 投票详情
     */
    VoteDetailDTO detail(long voteId, long userId);

    /**
     * 查询投票的简单数据
     *
     * @param voteIdList 待查询的投票的 id 集合
     * @return 投票的简单数据映射，key：投票的 id，value：投票的简单数据
     */
    Map<Long, VoteSimpleBO> mapVoteSimpleInfo(List<Long> voteIdList);

    /**
     * 查询投票的简单数据
     *
     * @param voteId 待查询的投票的 id
     * @return 投票的简单数据
     */
    VoteSimpleBO getVoteSimpleInfo(Long voteId);

    /**
     * 删除指定的投票信息
     *
     * @param voteId 指定的投票 id
     */
    void delete(long voteId);
}
